﻿Shader"Qs/MyShaderthree"{
	SubShader{
		  Pass{
		        CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag

				//application to vertex//使用结构体传递数据//使用结构体返回数据，这样可以返回很多个值
		        //结构体
				struct a2v {
				float4 vertex : POSITION;//位置用四个值//告诉unity把模型空间下的顶点座标填充给vertex
				float3 normal : NORMAL;//向量用三个值//告诉unity把模型空间下的法线方向填充给normal
				float4 texcoord : TEXCOORD0;//告诉unity把第一套纹理坐标填充给texcoord
                };
	            
	            //返回值的结构体
	            struct v2f {
					float4 position:SV_POSITION; 
					float3 temp:COLOR0;//这个语义可以由用户自己定义，一般都存储颜色
				};

				//顶点着色器//坐标转换
		        v2f vert(a2v v) {
				v2f f;
			    f.position = mul(UNITY_MATRIX_MVP,v.vertex);
				f.temp = v.normal;
		     	return f;
                }

				//片元着色器//控制输出到屏幕上的颜色
		    	float4 frag(v2f f) :SV_Target{
				return fixed4(f.temp,1);
                }


		     	ENDCG
            }
        }
		Fallback"VertexLit"
    }
//从应用程序传递到顶点函数的语义有那些a2v
//POSITION 顶点坐标(模型空间下的)
//NORMAL法线（模型空间下）
//TANGENT 切线(模型空间)
//TEXCOORD0~n 纹理坐标
//COLOR 顶点着色

//从顶点函数传递给片元函数的时候可以使用的语义
//SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)
//COLOR0 可以传递一组值 4个
//COLOR1 可以传递一组值 4个
//TEXCOORD0~7  传递纹理坐标

//片元函数传递给系统
//SV_Ttarget 颜色值，与颜色缓冲区的颜色进行混合，最后输出屏幕上